home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / games / ippon / source.lzh / gvram.s < prev    next >
Text File  |  2000-07-07  |  4KB  |  236 lines

  1. *    gvram    グラフィック画面に背景を描く
  2.  
  3.     .include    IOCSCALL.MAC
  4.  
  5.     .text
  6.     .even
  7.  
  8.     .xdef    _GvramInit
  9.     .xref    _bg_map,_bg_sp
  10.  
  11.  
  12. GVRAM        equ    $c0_0000
  13.  
  14.  
  15.     .text
  16.     .even
  17.  
  18.  
  19. _GvramInit:        * 各面開始時に呼ばれる
  20.     movem.l    d1/a0-a1,-(sp)
  21.  
  22.     suba.l    a1,a1
  23.     IOCS    _B_SUPER
  24.     move.l    d0,-(sp)        **
  25.  
  26.             * グラフィック画面に描画する
  27.     lea.l    _bg_sp,a0
  28.     move.l    a0,bg_sp_work    *
  29.  
  30.     move.l    #GVRAM,d0
  31.     lea.l    _bg_map+30,a1    * a1.l = BGマップ
  32.                 * +30 は .MAP のヘッダを飛ばすため
  33.  
  34.     moveq.l    #128-1,d1
  35. @@:
  36.     move.l    d0,-(sp)
  37.     pea.l    (a1)
  38.     bsr    putbg32
  39.     addq.w    #8,sp
  40.  
  41.     lea.l    32*2(a1),a1
  42.     dbra    d1,@b
  43.  
  44.     movea.l    (sp)+,a1        **
  45.     IOCS    _B_SUPER
  46.  
  47.     movem.l    (sp)+,d1/a0-a1
  48.     rts
  49.  
  50.  
  51.  
  52. ****    ****
  53. putbg32:        * BGデータを32個(横256ドット分)グラフィック画面に描画する
  54.             * in  : 8(a6).l = MAP データ
  55.             *    12(a6).l = GVRAM
  56.             * out : d0.l = 次のGVRAM
  57.     link    a6,#0
  58.     movem.l    d1-d4/a0-a5,-(sp)
  59.  
  60.     move.l    8(a6),a1    * a1.l = MAPデータ
  61.     move.l    12(a6),a2    * a2.l = GVRAM
  62.  
  63.     move.l    bg_sp_work,a5    * a5.l = スプライトデータ(定数)
  64.     moveq.l    #$f,d2        * d2.w = 定数
  65.     moveq.l    #32-1,d4    * 
  66. putbg32_loop:
  67.     move.w    (a1)+,d0    * d0.w = BGデータ
  68.     move.w    d0,d1
  69.     andi.w    #$00ff,d0
  70.     lsl.w    #5,d0        * BG 1個当たり32バイトだから32倍
  71.     lea.l    (a5,d0.w),a4    * a4.l = PCGパターン
  72.  
  73.     move.w    d1,d0
  74.     lsr.w    #3,d0
  75.     andi.w    #$01e0,d0    * d0.w = パレット
  76.     lea.l    bg_table(pc),a3
  77.     adda.w    d0,a3        * a3.l = bg_table にパレットを加算したもの
  78.             * BGのVH反転フラグによって分岐
  79.     btst.l    #15,d1
  80.     bne    putbg32_v
  81.     btst.l    #14,d1
  82.     bne    putbg32_h
  83.  
  84.  
  85.             * VH=00
  86.     movea.l    a2,a0        * a0.l =
  87.     moveq.l    #0,d0
  88.     moveq.l    #8-1,d3
  89. @@:
  90.     .rept    4
  91.     move.b    (a4)+,d0
  92.     move.w    d0,d1
  93.  
  94.     lsr.w    #4,d0
  95.     add.w    d0,d0
  96.     move.w    (a3,d0.w),(a0)+
  97.  
  98.     and.w    d2,d1
  99.     add.w    d1,d1
  100.     move.w    (a3,d1.w),(a0)+
  101.     .endm
  102.  
  103.     lea.l    1024-16(a0),a0
  104.     dbra    d3,@b
  105.  
  106.     bra    putbg32_next
  107.  
  108.  
  109. putbg32_v:
  110.     btst.l    #14,d1
  111.     bne    putbg32_vh
  112.  
  113.             * VH=10
  114.     lea.l    1024*7(a2),a0    * a0.l = 書き込むGVRAM
  115.     moveq.l    #0,d0
  116.     moveq.l    #8-1,d3
  117. @@:
  118.     .rept    4
  119.     move.b    (a4)+,d0
  120.     move.w    d0,d1
  121.  
  122.     lsr.w    #4,d0
  123.     add.w    d0,d0
  124.     move.w    (a3,d0.w),(a0)+
  125.  
  126.     and.w    d2,d1
  127.     add.w    d1,d1
  128.     move.w    (a3,d1.w),(a0)+
  129.     .endm
  130.  
  131.     lea.l    -1024-16(a0),a0
  132.     dbra    d3,@b
  133.  
  134.     bra    putbg32_next
  135.  
  136.  
  137. putbg32_h:        * VH=01
  138.     lea.l    16(a2),a0    * a0.l = 書き込むGVRAM
  139.     moveq.l    #0,d0
  140.     moveq.l    #8-1,d3
  141. @@:
  142.     .rept    4
  143.     move.b    (a4)+,d0
  144.     move.w    d0,d1
  145.  
  146.     lsr.w    #4,d0
  147.     add.w    d0,d0
  148.     move.w    (a3,d0.w),-(a0)
  149.  
  150.     and.w    d2,d1
  151.     add.w    d1,d1
  152.     move.w    (a3,d1.w),-(a0)
  153.  
  154.     .endm
  155.  
  156.     lea.l    1024+16(a0),a0
  157.     dbra    d3,@b
  158.  
  159.     bra    putbg32_next
  160.  
  161.  
  162. putbg32_vh:        * VH=11
  163.     lea.l    1024*7+16(a2),a0    * a0.l = 書き込むGVRAM
  164.     moveq.l    #0,d0
  165.     moveq.l    #8-1,d3
  166. @@:
  167.     .rept    4
  168.     move.b    (a4)+,d0
  169.     move.w    d0,d1
  170.  
  171.     lsr.w    #4,d0
  172.     add.w    d0,d0
  173.     move.w    (a3,d0.w),-(a0)
  174.  
  175.     and.w    d2,d1
  176.     add.w    d1,d1
  177.     move.w    (a3,d1.w),-(a0)
  178.     .endm
  179.  
  180.     lea.l    -1024+16(a0),a0
  181.     dbra    d3,@b
  182.  
  183.  
  184. putbg32_next:
  185.     lea.l    16(a2),a2
  186.     dbra    d4,putbg32_loop
  187.  
  188.     lea.l    1024*8-512(a2),a2
  189.  
  190.     move.l    a2,d0
  191.     movem.l    (sp)+,d1-d4/a0-a5
  192.     unlk    a6
  193.     rts
  194.  
  195.  
  196. *********************************************************
  197. _GvramTini:
  198.     moveq.l    #0,d0
  199.     rts
  200.  
  201.  
  202. *********************************************************
  203. bg_table:        * ゼロプライオリティ対策のためこういうテーブルが必要
  204.     .dc.w    $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0a,$0b,$0c,$0d,$0e,$0f
  205.     .dc.w    $00,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f
  206.     .dc.w    $00,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2a,$2b,$2c,$2d,$2e,$2f
  207.     .dc.w    $00,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3a,$3b,$3c,$3d,$3e,$3f
  208.     .dc.w    $00,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4a,$4b,$4c,$4d,$4e,$4f
  209.     .dc.w    $00,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5a,$5b,$5c,$5d,$5e,$5f
  210.     .dc.w    $00,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6a,$6b,$6c,$6d,$6e,$6f
  211.     .dc.w    $00,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f
  212.     .dc.w    $00,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f
  213.     .dc.w    $00,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9a,$9b,$9c,$9d,$9e,$9f
  214.     .dc.w    $00,$a1,$a2,$a3,$a4,$a5,$a6,$a7,$a8,$a9,$aa,$ab,$ac,$ad,$ae,$af
  215.     .dc.w    $00,$b1,$b2,$b3,$b4,$b5,$b6,$b7,$b8,$b9,$ba,$bb,$bc,$bd,$be,$bf
  216.     .dc.w    $00,$c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8,$c9,$ca,$cb,$cc,$cd,$ce,$cf
  217.     .dc.w    $00,$d1,$d2,$d3,$d4,$d5,$d6,$d7,$d8,$d9,$da,$db,$dc,$dd,$de,$df
  218.     .dc.w    $00,$e1,$e2,$e3,$e4,$e5,$e6,$e7,$e8,$e9,$ea,$eb,$ec,$ed,$ee,$ef
  219.     .dc.w    $00,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff
  220.     .even
  221.  
  222.  
  223.     .bss
  224.     .even
  225. bg_map_work:
  226.     .ds.l    1
  227. bg_sp_work:
  228.     .ds.l    1
  229. bg_pal_work:
  230.     .ds.l    1
  231. gvram_counter:
  232.     .ds.w    1
  233. gvram_work:
  234.     .ds.l    1
  235.  
  236.